package com.dragon.mmochat.model.role;

import java.io.Serializable;
import java.util.Map;

import com.dragon.mmochat.model.battle.MmochatBattleOrder;
import com.dragon.mmochat.model.battle.MmochatSme;
import com.dragon.mmochat.model.enumType.MmochatBattleOrderType;
import com.dragon.mmochat.model.enumType.MmochatEquipAttributeType;
import com.dragon.mmochat.model.enumType.MmochatFamilyType;
import com.dragon.mmochat.model.enumType.MmochatRoleBmpType;
import com.dragon.mmochat.model.enumType.MmochatSkillType;
import com.dragon.mmochat.model.enumType.MmochatSmeResult;
import com.dragon.mmochat.model.enumType.MmochatSmeType;
import com.dragon.mmochat.model.skill.MmochatSkill;

public interface MmochatRole extends Serializable {

	// 获取拷贝
	public MmochatRole getClone();

	// 获取ID
	public int getId();

	// 获取角色真身类型
	public MmochatRoleBmpType getBmpType();

	// 获取角色当前图片类型(可能变身)
	public MmochatRoleBmpType getCurRoleBmpType();

	// 设置角色当前图片类型
	public void setCurRoleBmpType(MmochatRoleBmpType curRoleBmpType);

	// 初始化角色图片类型为真身类型
	public void resetCurRoleBmpType();

	// 获取名字
	public String getName();

	// 获取等级
	public int getLevel();

	// 死后是否允许拉血复活
	public boolean isCanRescure();

	// 死后是否尸体消失
	public boolean isDisappearWhenDie();

	// 获取动画
	public Map<MmochatSmeType, MmochatSme> getSme();

	// 获取动画值
	public long getSmeValue();

	// 是否有此动画
	public boolean hasSme(MmochatSmeType type);

	// 增加循环动画效果
	public void addSme(MmochatSme sme);

	// 去除循环动画效果
	public void delSme(MmochatSmeType type);

	// 每回合过后障碍效果/辅助效果保持回合数减1
	public MmochatSmeResult decreaseSme();

	// 获取战斗指令
	public Map<MmochatBattleOrderType, MmochatBattleOrder> getBattleOrders();

	// 增加战斗指令
	public void addBattleOrder(MmochatBattleOrderType orderType);

	// 是否有此指令
	public boolean hasBattleOrder(MmochatBattleOrderType orderType);

	// 每回合过后指令保持回合数减1
	public boolean decreaseBattleOrder();

	// 初始化战斗
	public void initPkState(int battleId, boolean initBlood);

	// 获取当前战场血量
	public int getCurPkBlood();

	// 获取当前战场灵力
	public int getCurPkSprit();

	// 获取战斗中是否使用了防御
	public boolean isUseDefendInPk();

	// 设置战斗中使用防御
	public void setUseDefendInPk(boolean useDefendInPk);

	// 减少战场血量
	public void delCurPkBlood(int delBlood);

	// 减少战场灵力
	public void delCurPkSprit(int delSprit);

	// 获取道行或武学
	public int getDao();

	// 获取门派
	public MmochatFamilyType getFamily();

	// 获取技能列表
	public Map<MmochatSkillType, MmochatSkill> getSkills();

	/**************/

	// 获取当前总血量
	public int getTotalBlood();

	// 获取当前总灵力
	public int getTotalSprit();

	// 获取当前速度
	public int getSpeed();

	/**************/
	// 获取物理伤害
	public int getPhysicalAttack();

	// 获取法术伤害
	public int getSpritAttack();

	// 获取物防
	public int getPhysicalDefend();

	// 获取法防
	public int getMagicDefend();

	// 获取物理暴击(1.5倍伤害)
	public int getPhysicalDeadlyAttack();

	// 获取物理暴击抵抗
	public int getPhysicalDeadlyAttackDefend();

	// 获取法术暴击(1.5倍伤害)
	public int getMagicDeadlyAttack();

	// 获取法术暴击抵抗
	public int getMagicDeadlyAttackDefend();

	// 获取物理致命一击(2倍伤害)
	public int getPhysicalDoubleAttack();

	// 获取物理致命一击抵抗
	public int getPhysicalDoubleAttackDefend();

	// 获取法术致使一击(2倍伤害)
	public int getMagicDoubleAttack();

	// 获取法术致使一击抵抗
	public int getMagicDoubleAttackDefend();

	// 获取物理破防
	public int getPhysicalDefendIgnore();

	// 获取法术破防
	public int getMagicDefendIgnore();

	// 获取物理闪避
	public int getPhysicalAvoid();

	// 获取法术闪避
	public int getMagicAvoid();

	// 获取抗混乱率
	public int getAntiConfuse();

	// 获取抗冰冻率
	public int getAntiFreeze();

	// 获取抗封印率
	public int getAntiSeal();

	// 获取忽视抗混乱率
	public int getIgnoreAntiConfuse();

	// 获取忽视抗冰冻率
	public int getIgnoreAntiFreeze();

	// 获取忽视抗封印率
	public int getIgnoreAntiSeal();

	// 获取强力封印
	public int getStrengthenSeal();

	// 获取强力混乱
	public int getStrengthenConfuse();

	// 获取强力冰冻
	public int getStrengthenFreeze();

	// 获取物免
	public int getPhysicalDefendPercent();

	// 获取法免
	public int getMagicDefendPercent();

	// 获取抗雷
	public int getAntiGodSkill();

	// 获取抗水
	public int getAntiHumanSkill();

	// 获取抗毒
	public int getAntiDevilSkill();

	// 获取忽视抗雷
	public int getIgnoreAntiGodSkill();

	// 获取忽视抗水
	public int getIgnoreAntiHumanSkill();

	// 获取忽视抗毒
	public int getIgnoreAntiDevilSkill();

	// 获取神圣物理伤害(物理攻击对方时，对方实际掉血量=MAX(神圣物理伤害,普通物伤造成的掉血量))
	public int getSuperPhysicalAttack();

	// 获取神圣法术伤害(法术攻击对方时，对方实际掉血量=MAX(神圣法术伤害,普通法伤造成的掉血量))
	public int getSuperSpritAttack();

	// 转生次数
	public int getLife_turn();

	// 获取特定类型属性数值:此属性类型要求是独立类型，其它类型不能与之有交集。
	// 如野蛮--全天赋，就有交集，不能使用此方法
	// 怪物或宠物使用此方法，固定返回0
	public int getCommonEquipAttributeValue(MmochatEquipAttributeType type);

}
